<?php

/**
 * Description of RepoCliente
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoGabineteBloqueo extends Repositorio
{

  function __construct()
  {
    $this->tabla = "gabinete_bloqueo";
    $this->id = "idGabineteBloqueo";
  }

  function agregar(GabineteBloqueo $gabineteBloqueo)
  {
    try
    {

      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "INSERT INTO " . $this->tabla . "(gabinete, desde, hasta, usuario) values (";
      $query .= $gabineteBloqueo->getIdGabinete() . ", ";
      $query .= "'".$this->SqlDateTime($gabineteBloqueo->getDesdeFecha(), $gabineteBloqueo->getDesdeHora()) . "', ";
      $query .= "'".$this->SqlDateTime($gabineteBloqueo->getHastaFecha(),$gabineteBloqueo->getHastaHora()) . "',";
      $query .= "'".$gabineteBloqueo->getUsuario() . "')";
      $result = $this->PostSQL($query);
      $this->commitTransaction();
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex->getCode() + "|" + $ex->getMessage();
    }
  }

  function modificar(GabineteBloqueo $gabineteBloqueo)
  {
    try
    {
      $link = $this->OpenDB();
      $this->beginTransaction();
      if ($this->VerificarVersion($gabineteBloqueo->getVersion(), $gabineteBloqueo->getId()))
      {
        $query = "UPDATE " . $this->tabla . " SET ";
        $query .= "desde = '" . $this->SqlDateTime($gabineteBloqueo->getDesdeFecha(), $gabineteBloqueo->getDesdeHora()) . "', ";
        $query .= "hasta = '" . $this->SqlDateTime($gabineteBloqueo->getHastaFecha(),$gabineteBloqueo->getHastaHora()) . "', ";
        $query .= "usuario = '" . $gabineteBloqueo->getUsuario() . "', ";
        $query .= "gabinete = " . $gabineteBloqueo->getIdGabinete();
        $query .= " WHERE " . $this->id . " = " . $gabineteBloqueo->getId();
        $result = $this->PostSQL($query);
        $this->commitTransaction();
        $this->CloseDB($link);
        return $result;
      } else
      {
        $this->rollbackTransaction();
        $this->CloseDB($link);
        throw new Exception("El registro ha sido modificado por otro usuario", ERROR_VERSION);
      }
    } catch (Exception $ex)
    {
      return $ex->getCode() + "|" + $ex->getMessage();
    }
  }

  function buscar($id)
  {
    if ($id != "")
    {
      $link = $this->OpenDB();
      $queryTxt = "SELECT gabinete, desde, hasta, CONVERT(BIGINT, version) AS version, usuario FROM " . $this->tabla . "       
      WHERE " . $this->id . " = " . $id;
      $query = $this->GetSQL($queryTxt);
      $this->CloseDB($link);
      $gabineteServicios = new GabineteServicios();
      $gabinete = $gabineteServicios->buscar($query[0]->gabinete);
      $gabineteBloqueo = new GabineteBloqueo();
      $gabineteBloqueo->setGabinete($gabinete);
      $gabineteBloqueo->setVersion($query[0]->version);
      $gabineteBloqueo->setDesde($query[0]->desde);
      $gabineteBloqueo->setHasta($query[0]->hasta);
      $gabineteBloqueo->setUsuario($query[0]->usuario);
      $gabineteBloqueo->setId($id);
      return $gabineteBloqueo;
    } else
    {
      return new GabineteBloqueo();
    }
  }

  function listarFuturos()
  {
    $link = $this->OpenDB();
    $query = "SELECT idGabineteBloqueo, gabinete, desde, hasta, CONVERT(BIGINT, version) AS version
      FROM gabinete_bloqueo 
      WHERE hasta IS NULL OR hasta >= GETDATE()";
    $gabineteBloqueosObj = $this->GetSQL($query);
    $this->CloseDB($link);
    $gabineteServicios = new GabineteServicios();
    $gabineteBloqueos = false;
    if ($gabineteBloqueosObj)
    {
      foreach ($gabineteBloqueosObj as $gabineteBloqueoObj)
      {
        $gabinete = $gabineteServicios->buscar($gabineteBloqueoObj->gabinete);
        $gabineteBloqueo = new GabineteBloqueo();
        $gabineteBloqueo->setGabinete($gabinete);
        $gabineteBloqueo->setVersion($gabineteBloqueoObj->version);
        $gabineteBloqueo->setDesde($gabineteBloqueoObj->desde);
        $gabineteBloqueo->setHasta($gabineteBloqueoObj->hasta);
        $gabineteBloqueo->setId($gabineteBloqueoObj->idGabineteBloqueo);
        $gabineteBloqueos[] = $gabineteBloqueo;
      }
    }
    return $gabineteBloqueos;
  }

}

?>
